package l1j.server.server.model.poison;

import l1j.server.server.model.L1Character;
import l1j.server.server.model.Instance.L1PcInstance;
import l1j.server.server.serverpackets.S_Poison;
import l1j.server.server.serverpackets.S_ServerMessage;
import static l1j.server.server.model.skill.L1SkillId.VENOM_RESIST;

/**中毒處理**/
public abstract class L1Poison {
	protected static boolean isValidTarget(final L1Character cha , final boolean can) {
		if (cha == null) {
			return false;
		}
		// 毒は重複しない
		if (cha.getPoison() != null) {
			return false;
		}

		if (!(cha instanceof L1PcInstance)) {
			return true;
		}

		final L1PcInstance player = (L1PcInstance) cha;
		// ゼニス リング装備中、バフォ メットアーマー装備中 、ベノム レジスト中
		if(can){
		if (player.getInventory().checkEquipped(20298)//opqlo 潔尼斯戒指
				|| player.getInventory().checkEquipped(20117)//opqlo 巴風特盔甲
				|| player.hasSkillEffect(VENOM_RESIST)) {//opqlo 毒性抵抗
			return false;
		}
		}
		return true;
	}

	// 微妙・・・素直にsendPacketsをL1Characterへ引き上げるべきかもしれない
	protected static void sendMessageIfPlayer(final L1Character cha, final int msgId) {
		if (!(cha instanceof L1PcInstance)) {
			return;
		}

		final L1PcInstance player = (L1PcInstance) cha;
		player.sendPackets(new S_ServerMessage(msgId));
	}

	/**
	 * この毒の効果を取り除く。<br>
	 *
	 * @see L1Character#curePoison()
	 */
	public abstract void cure();

	/**
	 * この毒のエフェクトIDを返す。
	 *
	 * @see S_Poison#S_Poison(int, int)
	 *
	 * @return S_Poisonで使用されるエフェクトID
	 */
	public abstract int getEffectId();
}
